/**
 * @author Vitor Franco do Carmo (vfcarmo@gmail.com)
 * @since 05/10/2013
 *
 */
package br.com.vfcfw.test.functional.exemplo;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import br.com.vfcfw.test.BaseTesteFuncional;
import br.com.vfcfw.test.functional.BasePagina;


/**
 * Classe que representa a página de perfil, do usuário autenticado, do GUJ.
 * 
 * @author Vitor Franco do Carmo (vfcarmo@gmail.com)
 * @since 05/10/2013
 * 
 */
public class GujPerfil extends BasePagina {

    @FindBy(xpath = "/html/body/header/section[2]/div[1]/section/nav/ul/li[1]/a")
    private WebElement lnkPerfil;

    @FindBy(xpath = "/html/body/div[2]/section[1]/div[2]/span[2]")
    private WebElement lblReputacao;

    @FindBy(xpath = "/html/body/div[2]/section[1]/div[1]/ul/li/a")
    private WebElement lnkEditarPerfil;

    @FindBy(name = "realName")
    private WebElement txtNomeReal;

    @FindBy(xpath = "/html/body/div[2]/form/input[9]")
    private WebElement btnSalvar;

    /**
     * Construtor da classe.
     */
    public GujPerfil() {

        super(BaseTesteFuncional.obterDriverAtual());
    }

    /**
     * Navega para a página de perfil do usuário logado.
     * 
     * @return {@link GujPerfil}.
     */
    public GujPerfil navegarParaPerfil() {

        comandos.esperarElementoVisivel(lnkPerfil);
        comandos.clicar(lnkPerfil);

        return obterProximaPagina(GujPerfil.class);
    }

    /**
     * Verifica se está na página de perfil do usuário autenticado.
     * 
     * @return <tt>TRUE</tt> se estiver na página de perfil, <tt>FALSE</tt> caso contrário.
     */
    public boolean isPaginaPerfil() {

        comandos.esperarElementoVisivel(lnkEditarPerfil);

        return comandos.isElementoContemTexto(lnkEditarPerfil, "editar perfil");
    }

    /**
     * Edita o perfil definindo o nome real do usuário autenticado.
     * 
     * @return <tt>TRUE</tt> se editar o perfil e voltar para a página home do usuário autenticado, <tt>FALSE</tt> caso
     *         contrário.
     */
    public boolean editarPerfil() {

        comandos.clicar(lnkEditarPerfil);

        comandos.esperarElementoVisivel(txtNomeReal);
        comandos.definirValor(txtNomeReal, "Vítor Franco do Carmo");
        comandos.clicar(btnSalvar);

        comandos.esperarElementoVisivel(lblReputacao);

        return comandos.isElementoContemTexto(lnkPerfil, "Vítor Franco do Carmo");
    }

}
